#include "../../global/QmlNames.h"
#include "MessageModel.h"

X_BEGIN_NAMESPACE

MessageModelPrivate::MessageModelPrivate()
    : QSharedData()
{

}

MessageModelPrivate::MessageModelPrivate(const MessageModelPrivate &src)
    : QSharedData(src)
    , m_id(src.m_id)
    , m_content(src.m_content)
    , m_contentType(src.m_contentType)
    , m_senderJid(src.m_senderJid)
    , m_senderName(src.m_senderName)
    , m_time(src.m_time)
    , m_thumbnail(src.m_thumbnail)
{

}

// Message Model
MessageModel::MessageModel()
    : QObject(NULL)
    , d(new MessageModelPrivate)
{

}

MessageModel::MessageModel(int id)
    : QObject(NULL)
    , d(new MessageModelPrivate)
{
    d->m_id = id;
}

MessageModel::MessageModel(const MessageModel &src)
    : QObject(NULL)
    , d(src.d)
{

}

MessageModel &MessageModel::operator =(const MessageModel &rhs)
{
    if(this != &rhs) this->d = rhs.d;

    return *this;
}

const char *MessageModel::qmlName()
{
    return QmlNames::SubModelType::MessageModel;
}

QString MessageModel::content() const
{
    return d->m_content;
}

MessageContentType MessageModel::contentType() const
{
    return d->m_contentType;
}

QString MessageModel::senderJid() const
{
    return d->m_senderJid;
}

QString MessageModel::senderName() const
{
    return d->m_senderName;
}

QDateTime MessageModel::time() const
{
    return d->m_time;
}

QString MessageModel::thumbnail() const
{
    return d->m_thumbnail;
}

QString MessageModel::senderPhoto() const
{
    return d->m_senderPhoto;
}

int MessageModel::id() const
{
    return d->m_id;
}

MessageModel& MessageModel::setContent(QString content)
{
    if (d->m_content == content)
        return *this;

    d->m_content = content;
    emit contentChanged(content);

    return *this;
}

// 缩略信息，仅对图片及视频有效。TODO: 后续再实现
// 图片生成一个小的缩略图，在加载的时候节省内存
// 视频生成第一侦的图片，在消息中显示，以节省内存
MessageModel &MessageModel::setThumbnail(QString thumbnail)
{
    if (d->m_thumbnail == thumbnail)
        return *this;

    d->m_thumbnail = thumbnail;
    emit thumbnailChanged(thumbnail);

    return *this;
}

MessageModel &MessageModel::setContentType(MessageContentType contentType)
{
    if (d->m_contentType == contentType)
        return *this;

    d->m_contentType = contentType;
    emit contentTypeChanged(contentType);

    return *this;
}

MessageModel &MessageModel::setSenderJid(QString senderJid)
{
    if (d->m_senderJid == senderJid)
        return *this;

    d->m_senderJid = senderJid;
    emit senderJidChanged(senderJid);

    return *this;
}

MessageModel &MessageModel::setSenderName(QString senderName)
{
    if (d->m_senderName == senderName)
        return *this;

    d->m_senderName = senderName;
    emit senderNameChanged(senderName);

    return *this;
}

MessageModel &MessageModel::setSenderPhoto(QString senderPhoto)
{
    if (d->m_senderPhoto == senderPhoto)
        return *this;

    d->m_senderPhoto = senderPhoto;
    emit senderPhotoChanged(senderPhoto);

    return *this;
}

MessageModel &MessageModel::setTime(QDateTime time)
{
    if (d->m_time == time)
        return *this;

    d->m_time = time;
    emit timeChanged(time);

    return *this;
}

X_END_NAMESPACE
